public class code02s {

    // 定义一个全局队列用来存储节点信息
    Queue<Integer> queue = new ArrayDeque<>();

    public void flatten(TreeNode root) {
        // 解法二：暴力解法
        // 将当前的节点通过顺序遍历先遍历一遍
        // 再将 root 节点根据遍历的信息重新拼接

        if(root == null) {
            return;
        }

        // 实现一个方法通过递归将数据存储
        getVal(root);


        // 将根节点的第一个值设置为队列的第一个元素
        root.val = queue.poll();
        root.left = null;

        System.out.print(queue.size());

        TreeNode p = root;
        while(!queue.isEmpty()) {
            TreeNode n = new TreeNode(queue.poll());
            p.right = n;
            p = p.right;
        }
    }

    public void getVal(TreeNode root) {
        if(root == null) {
            return;
        }
        queue.offer(root.val);

        if(root.left != null) {
            getVal(root.left);
        }
        if(root.right != null) {
            getVal(root.right);
        }
    }
}
